﻿using System;
using System.Collections.Generic;
using System.Linq;

namespace CRM.Database.Model
{
    public class ControllersAndActionsCollection : AbstractCollection
    {
        /// <summary>
        /// Стaтическая коллекция 
        /// </summary>
        // protected static List<ControllersAndActions> _list;
        public List<ControllersAndActions> ControllersAndActionsList
        {
            get
            {
                //if (_list == null)
                //    _list = DB.Entities.ControllersAndActions.ToList();
                //return _list;
                return Entities.ControllersAndActions.ToList();
            }
        }

        /// <summary>
        /// Получение объекта по идентификатору
        /// </summary>
        /// <param name="id">Идентификатор</param>
        /// <returns>Объект</returns>
        public override object GetItemById(int id)
        {
            return Entities.ControllersAndActions.Find(id);
        }


        /// <summary>
        /// Получение статического списка для хранения объектов
        /// </summary>
        /// <returns></returns>
        public override object GetStaticCollection()
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// Обнуление статической коллекции
        /// </summary>
        protected override void SetStaticListToNULL()
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// Получение идентификатора элемента коллекции
        /// </summary>
        /// <param name="controller">Контроллер</param>
        /// <param name="action">Действие</param>
        /// <returns>Идентификатор</returns>
        public int GetControllersAndActionsIdByControllerAndAction(string controller, string action)
        {
            ControllersAndActions controllersAndActions =
                ControllersAndActionsList.FirstOrDefault(c => c.Action == action & c.Controller == controller);
            if (controllersAndActions != null)
                return controllersAndActions.IdControllersAndAction;
            return 0;
        }

        #region Overrides of AbstractCollection

        /// <summary>
        /// Обновление элемента в коллекции
        /// </summary>
        /// <param name="item">Новый элемент</param>
        /// <param name="userLogin">Логин пользователя, который делает изменения</param>
        /// <returns>Результат операции</returns>
        public bool Update(object item, string userLogin)
        {
            var newObject = (ControllersAndActions) item;
            if (newObject == null)
                return false;


            var object4Update = GetItemByIdFromDatabase(newObject.GetKeyValue()) as ControllersAndActions;
            if (object4Update == null)
                return false;

            if (!string.IsNullOrEmpty(newObject.Action))
                object4Update.Action = newObject.Action;

            if (!string.IsNullOrEmpty(newObject.Controller))
                object4Update.Controller = newObject.Controller;

            if (!string.IsNullOrEmpty(newObject.Description))
                object4Update.Description = newObject.Description;


            return base.Update(object4Update, userLogin);
        }

        /// <summary>
        /// Получение списка элементов
        /// </summary>
        /// <returns>Список элементов</returns>
        public override List<object> GetList()
        {
            return new List<object>(ControllersAndActionsList);
        }

        /// <summary>
        /// Получение типа текущего элемента
        /// </summary>
        /// <returns></returns>
        protected override Type GetItemType()
        {
            return typeof (ControllersAndActions);
        }

        #endregion
    }
}